//
//  FMModelTool.h
//  面向对象的数据库操作
//
//  Created by appbanana on 2017/3/18.
//  Copyright © 2017年 appbanana. All rights reserved.
//

#import <Foundation/Foundation.h>


@protocol FMSqliteModelProtocol <NSObject>

@required
+ (NSString *)primaryKey;

@optional
+ (NSArray *)ignoreColumnNames;

+ (NSDictionary *)renameNewKeyToOldKeyDic;




@end

@interface FMModelTool : NSObject

/**
 *  获取表名
 *
 *  @param cls 类名
 *
 *  @return 表名字符串
 */
+ (NSString *)tableNameWithClass:(Class )cls;

/**
 *  获取临时表名
 *
 *  @param cls 类
 *
 *  @return 临时表名
 */
+ (NSString *)tmpTableNameWithClass:(Class )cls;

/**
 *  使用运行时获取模型中的类型和属性名称
 *
 *  @param cls 要操作的模型
 *
 *  @return 返回一个字典 key是属性名称 value 是oc中类型
 */
+ (NSDictionary *)modelIvarNameAndIvarType:(Class)cls;

/**
 *  返回模型中的属性名称和对应的sqlite类型
 *
 *  @param cls 要操作的模型
 *
 *  @return 返回字典 key是模型中属性名称 value是OC对用的sqlite类型
 */
+ (NSDictionary *)modelIvarNameAndSqliteType:(Class)cls;

/**
 *  把上面的模型转化为对应sqlite字符串
 *
 *  @param cls 模型
 *
 *  @return sqlite要操作的字符串（已经处理好的）
 */
+ (NSString *)modelIvarNameAndSqliteTypeStr:(Class)cls;

/**
 *  返回模型中所有的排好序属性名称
 *
 *  @param cls 模型
 *
 *  @return 返回模型中所有的排好序属性名称
 */
+ (NSArray *)modelIvarSortedName:(Class)cls;

@end
